package Modelo;

import java.sql.ResultSet;

import java.sql.SQLException;
//import java.util.List;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

public class MAccion {

	public MAccion() {
		super();
	}
	
//**********************************CATEGORIA*******************************************
	
	public void registrarCategoria(MCategoria categoria) {
		String tiraSQL = "INSERT INTO categoria"+"(codigocat,descripcion)"+
		"VALUES"+"('"+categoria.getCodigocat()+"','"+categoria.getDescripcion()+"')";
		                                      
	  Conexion.ejecutar(tiraSQL);
	}
	
	public boolean consultarCategoria(int cod) {
		boolean hallado=false;
		String tiraSQL = "SELECT * FROM categoria";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			while (resultSet.next()) {
				int codigocat = resultSet.getInt("codigocat");
				if(codigocat==cod){
					hallado=true;
					break;
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return hallado;
	}
	
	public MCategoria obtenerCategoria(int cod) {
		MCategoria categoria=null;
		String tiraSQL = "SELECT * FROM categoria WHERE codigocat='"+cod+"'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			    if(resultSet.next()){
				int codigocat = resultSet.getInt("codigocat");
				String descripcion = resultSet.getString("descripcion");
				categoria=new MCategoria(codigocat,descripcion);
			    }
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return categoria;
	}
	
	
	public int ObtenerCodCategoria(String nombreCategoria){
		ResultSet rs;
		int codcategoria=0;
		    String tiraSQL="SELECT codigocat FROM categoria WHERE descripcion =  '"+nombreCategoria+"'";
		    rs=Conexion.consultar(tiraSQL);
			try {
				rs.next();
				codcategoria=rs.getInt("codigocat");
			} catch (SQLException e) {
					e.printStackTrace();
			}

		return codcategoria;		
	}		
		public int ObtenerCodProducto(String nombreProducto){
		ResultSet rs;
		int codproducto=0;
		    String tiraSQL="SELECT codigopro FROM producto WHERE descripcion =  '"+nombreProducto+"'";
		    rs=Conexion.consultar(tiraSQL);
			try {
				rs.next();
				codproducto=rs.getInt("codigopro");
			} catch (SQLException e) {
					e.printStackTrace();
			}

		return codproducto;		
				
		
		}

	public Vector<String> capturarDescripcionMCategorias() {
		Vector<String> MCategorias = new Vector<String>();
		String tiraSQL = "SELECT * FROM categoria";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			    while(resultSet.next()){
				String descripcion = resultSet.getString("descripcion");
				MCategorias.add(descripcion);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return MCategorias;
	}
	
//**********************************CLIENTE***********************************************
	
	public void registrarCliente(MCliente cliente) {
		String tiraSQL = "INSERT INTO cliente"+"(cedula,nombre,apellido,telefono,direccion)"+
		"VALUES"+"('"+cliente.getCedula()+"','"+cliente.getNombre()+"','"+cliente.getApellido()+"','"+cliente.getTelefono()+"','"+cliente.getDireccion()+"')";
		                                      
	  Conexion.ejecutar(tiraSQL);
	}
	public void modificarCliente(int cedula,MCliente cliente) {
		String tiraSQL = "UPDATE cliente SET nombre='"+cliente.getNombre()+"', apellido='"+cliente.getApellido()+"', telefono='"+cliente.getTelefono()+"', direccion='"+cliente.getDireccion()+"' WHERE cedula='"+cedula+"'";
		                                      
	  Conexion.ejecutar(tiraSQL);
	}
	
	public boolean consultarCliente(int ced) {
		boolean hallado=false;
		String tiraSQL = "SELECT * FROM cliente WHERE cedula='"+ced+"'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			while (resultSet.next()) {
				int cedula = resultSet.getInt("cedula");
				if(cedula==ced){
					hallado=true;
					break;
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return hallado;
	}
	
	public MCliente capturarCliente(int ced) {
		MCliente cliente =null;
		String tiraSQL = "SELECT * FROM cliente WHERE cedula='"+ced+"'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		
		try {
			if(resultSet.next()){
			int cedula = resultSet.getInt("cedula");
			String nombre = resultSet.getString("nombre");
			String apellido = resultSet.getString("apellido");
			String telefono = resultSet.getString("telefono");
			String direccion = resultSet.getString("direccion");
			cliente = new MCliente(cedula, nombre, apellido, telefono, direccion);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		return cliente;
	}
	
	
//**********************************INGREDIENTE*****************************************	

	public void registrarIngrediente(MIngrediente ingrediente) {
		String tiraSQL = "INSERT INTO ingrediente"+"(codigoin,descripcion,existencia,stockmax,stockmin)"+
		"VALUES"+"('"+ingrediente.getCodigoIn()+"','"+ingrediente.getDescripcion()+"','"+ingrediente.getExistencia()+"','"+ingrediente.getStock_max()+"','"+ingrediente.getStock_min()+"')";
		                                      
	  Conexion.ejecutar(tiraSQL);
	}
	
	public boolean consultarIngrediente(int cod) {
		boolean hallado=false;
		String tiraSQL = "SELECT * FROM ingrediente WHERE codigoin='"+cod+"'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			while (resultSet.next()) {
				int codigo = resultSet.getInt("codigoin");
				if(codigo==cod){
					hallado=true;
					break;
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return hallado;
	}
	
	public int contarIngrediente(){
		ResultSet rs;
		int i=0;
		    String tiraSQL="SELECT * FROM ingrediente;";
			rs=Conexion.consultar(tiraSQL);
			try {
				while(rs.next()){
					i++;
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		return i;		
		}
	
	
	public MIngrediente capturarIngrediente(int cod) {
		MIngrediente ingrediente = null;
		String tiraSQL = "SELECT * FROM ingrediente WHERE codigoin='"+cod+"'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			     if(resultSet.next()){
				int codigo = resultSet.getInt("codigoin");
				String descripcion = resultSet.getString("descripcion");
				float existencia = resultSet.getFloat("existencia");
				float stockmax = resultSet.getFloat("stockmax");
				float stockmin = resultSet.getFloat("stockmin");
				ingrediente = new MIngrediente(codigo, descripcion, existencia, stockmax, stockmin);
			     }
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return ingrediente;
	}
	
	public ResultSet obtenerIngredientes() {
		String tiraSQL = "SELECT * FROM ingrediente";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		return resultSet;
	}
	
	public void ActualizarExistencia(int codIngrediente,int cantidad){
		float existencia=0;
		String tiraSQL = "SELECT * FROM ingrediente WHERE codigoin='"+codIngrediente+"'";
		ResultSet resultSet =Conexion.consultar(tiraSQL);
		try {
			resultSet.next();
			existencia=resultSet.getFloat("existencia");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		tiraSQL = "UPDATE ingrediente SET existencia='"+(existencia+cantidad)+"' WHERE codigoin='"+codIngrediente+"'";
        Conexion.ejecutar(tiraSQL);		
		}
	
	public Vector<String> capturarDescripcionIngrediente() {
		Vector<String> mIngrediente = new Vector<String>();
		String tiraSQL = "SELECT * FROM ingrediente";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			    while(resultSet.next()){
				String descripcion = resultSet.getString("descripcion");
				mIngrediente.add(descripcion);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return mIngrediente;
	}
	
	public int ObtenerCodIngrediente(String nombreingrediente){
		ResultSet rs;
		int codingrediente=0;
		    String tiraSQL="SELECT codigoin FROM ingrediente WHERE descripcion =  '"+nombreingrediente+"'";
		    rs=Conexion.consultar(tiraSQL);
			try {
				rs.next();
				codingrediente=rs.getInt("codigoin");
			} catch (SQLException e) {
					e.printStackTrace();
			}

		return codingrediente;		
				
		
		}
	
	public void InsertarReceta(Vector<MReceta> recetas){
		   String tiraSQL;
		   MReceta detalles;
			for(int i=0;i< recetas.size();i++){
				detalles=recetas.elementAt(i);
				tiraSQL= "INSERT INTO receta VALUES('"+detalles.getCodigop()+"','"+detalles.getCodigoin()+"','"+detalles.getCantidad()+"');";
				Conexion.ejecutar(tiraSQL);
			}
			
			
		}
	
	
	
//************************************ORDEN**********************************************	
	
	public void registrarOrden(MOrden orden) {
		String tiraSQL = "INSERT INTO orden"+"(codigoo,cedula,fecha,montototal)"+
		"VALUES"+"('"+orden.getCodigoord()+"','"+orden.getCedulacli()+"','"+orden.getFecha()+"','"+orden.getMontototal()+"')";
		                                      
	  Conexion.ejecutar(tiraSQL);
	}
	
	public boolean consultarOrden(int codOrden) {
		boolean hallado=false;
		String tiraSQL = "SELECT * FROM orden WHERE codigoo='"+codOrden+"'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			while (resultSet.next()) {
				int codigoOrden = resultSet.getInt("codigoo");
				if(codigoOrden==codOrden){
					hallado=true;
					break;
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return hallado;
	}
	
	public MOrden capturarOrden(int codOrden) {
		MOrden orden= null;
		String tiraSQL = "SELECT * FROM orden WHERE codigoo='"+codOrden+"'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			    if(resultSet.next()){
				int codigoo = resultSet.getInt("codigoo");
				int cedula = resultSet.getInt("cedula");
				String fecha = resultSet.getString("fecha");
				float montototal = resultSet.getFloat("montototal");
				orden = new MOrden(codigoo, cedula, fecha, montototal);
			    }
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return orden;
	}

	
//*************************************PEDIDO*******************************************

	public void registrarPedido(MPedido pedido) {
		String tiraSQL = "INSERT INTO pedido"+"(codigop,codigoo,cantidad)"+
		"VALUES"+"('"+pedido.getCodigop()+"','"+pedido.getCodigoord()+"','"+pedido.getCantidad()+"')";
		                                      
	  Conexion.ejecutar(tiraSQL);
	}
	
	
	public void InsertarPedidos(Vector<MPedido> pedidos){
		   String tiraSQL;
		   MPedido detalle;
			for(int i=0;i< pedidos.size();i++){
				detalle=pedidos.elementAt(i);
				tiraSQL= "INSERT INTO pedido VALUES('"+detalle.getCodigoord()+"','"+detalle.getCodigop()+"','"+detalle.getCantidad()+"');";
				Conexion.ejecutar(tiraSQL);
			}
			
			
		}
	
	public void ActualizarIngredientesPorCompra(List<MIngrediente> ingredientes){
		int codingrediente;
		MIngrediente ingrediente;
		String tiraSQL = "SELECT * FROM ingrediente";
		ResultSet resultSet =Conexion.consultar(tiraSQL);
		try {
			
			while(resultSet.next()){
			codingrediente=resultSet.getInt("codigoin");
			for(int i=0;i<ingredientes.size();i++){
				ingrediente=ingredientes.get(i);
			  if(codingrediente==ingrediente.getCodigoIn()){
				tiraSQL = "UPDATE ingrediente SET existencia='"+(ingrediente.getExistencia())+"' WHERE codigoin='"+codingrediente+"'";
			    Conexion.ejecutar(tiraSQL);	
				
			}
			}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		
		}

	
//**********************************PRODUCTO********************************************
	
	public void registrarProducto(MProducto producto) {
		String tiraSQL = "INSERT INTO producto"+"(codigopro,codigocat,descripcion,preciouni,estatus)"+
		"VALUES"+"('"+producto.getCodigop()+"','"+producto.getCodigocat()+"','"+producto.getDescripcion()+"','"+producto.getPreciouni()+"','"+producto.getEstatus()+"')";
		                                      
	  Conexion.ejecutar(tiraSQL);
	}
	
	public void modificarProducto(int codigo,MProducto producto) {
		String tiraSQL = "UPDATE producto SET preciouni='"+producto.getPreciouni()+"' WHERE codigopro='"+codigo+"'";
		                                      
	  Conexion.ejecutar(tiraSQL);
	}
	
	public boolean consultarProducto(int codPro) {
		boolean hallado=false;
		String tiraSQL = "SELECT * FROM producto";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			while (resultSet.next()) {
				int codigoOrden = resultSet.getInt("codigopro");
				if(codigoOrden==codPro){
					hallado=true;
					break;
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return hallado;
	}
	public MProducto capturarProducto(int codpro) {
		MProducto producto =null;
		String tiraSQL = "SELECT * FROM producto WHERE codigopro='"+codpro+"'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			if(resultSet.next()){
				int codigopro = resultSet.getInt("codigopro");
				int codigocat = resultSet.getInt("codigocat");
				String descripcion = resultSet.getString("descripcion");
				float preciouni = resultSet.getFloat("preciouni");
				String estatus = resultSet.getString("estatus");
				producto = new MProducto(codigopro, codigocat,descripcion, preciouni,estatus);
				}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return producto;
	}
	public Vector<String> capturarDescripcionProductos() {
		Vector<String> productos = new Vector<String>();
		String tiraSQL = "SELECT * FROM producto";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			    while(resultSet.next()){
				String descripcion = resultSet.getString("descripcion");
				productos.add(descripcion);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return productos;
	}
	
	public void eliminarProducto(int codProducto){
		String tiraSQL = "DELETE FROM producto WHERE codigopro='"+codProducto+"'"; 
	  Conexion.ejecutar(tiraSQL);
		  tiraSQL = "DELETE FROM receta WHERE codigop='"+codProducto+"'"; 
		  Conexion.ejecutar(tiraSQL);
	  
	}
	public List<MReceta> cargarIngredientesPorProductosCod(int cod){
		List<MReceta> listaDetalles =new ArrayList<MReceta>();
		MReceta receta;
			String tiraSQL="SELECT * FROM receta WHERE codigop="+cod+"";
			ResultSet rs=Conexion.consultar(tiraSQL);
			
			int codIngrediente;
			float cantidad;
			try {
				while(rs.next()){
					codIngrediente=rs.getInt("codigoin");
					cantidad=rs.getFloat("cantidad");
					receta=new MReceta(cod,codIngrediente,cantidad);
					listaDetalles.add(receta);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		return listaDetalles;
		}
//**********************************RECETA***********************************************
	
	public void registrarReceta(MReceta receta) {
		String tiraSQL = "INSERT INTO receta"+"(codigop,codigoin,cantidad)"+
		"VALUES"+"('"+receta.getCodigop()+"','"+receta.getCodigoin()+"','"+receta.getCantidad()+"','"+receta.getCantidad()+"')";
		                                      
	  Conexion.ejecutar(tiraSQL);
	}
	
	public boolean consultarReceta(int codpro) {
		boolean hallado=false;
		String tiraSQL = "SELECT * FROM receta";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			while (resultSet.next()) {
				int codigopro = resultSet.getInt("codigop");
				if(codigopro==codpro){
					hallado=true;
					break;
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return hallado;
	}
	public Vector<MReceta> capturarReceta(int codpro) {
		MReceta receta;
		Vector<MReceta> recetas=new Vector<MReceta>();
		String tiraSQL = "SELECT * FROM receta WHERE codigop='"+codpro+"'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			while(resultSet.next()){
				int codigop = resultSet.getInt("codigop");
				int codigoing = resultSet.getInt("codigoin");
				float cantidad = resultSet.getFloat("cantidad");
				receta = new MReceta(codigop,codigoing,cantidad);
				recetas.add(receta);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return recetas;
	}
	
	
	public int obtenerCantidadProductoVendidos(){
		String tiraSQL = "SELECT descripcion,count(descripcion) as cantidad,(preciouni*count(descripcion)) as total from producto,receta where producto.codigopro=receta.codigop group by descripcion,preciouni order by count(descripcion) asc";
		int i=0;
		ResultSet resultSet = Conexion.consultar(tiraSQL);	
		try {
			while(resultSet.next()){
				i++;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return i;
	}
	public ResultSet obtenerIngredientesPorProducto(){
		String tiraSQL = "SELECT ingrediente.descripcion as descripcioningrediente,producto.descripcion as descripcionproducto FROM ingrediente,receta,producto where ingrediente.codigoin=receta.codigoin and producto.codigopro=receta.codigop;";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		return resultSet;
	}
	public ResultSet obtenerProdVendMontoAsc(){
		String tiraSQL = "SELECT descripcion,count(descripcion) as cantidad,(preciouni*count(descripcion)) as total from producto,pedido where producto.codigopro=pedido.codigop group by descripcion,preciouni order by (preciouni*count(descripcion)) asc";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		return resultSet;
	}
	public ResultSet obtenerProdVendMontoDesc(){
		String tiraSQL = "SELECT descripcion,count(descripcion) as cantidad,(preciouni*count(descripcion)) as total from producto,pedido where producto.codigopro=pedido.codigop group by descripcion,preciouni order by (preciouni*count(descripcion)) desc";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		return resultSet;
	}
	public ResultSet obtenerProdVendCantidadAsc(){
		String tiraSQL = "SELECT descripcion,count(descripcion) as cantidad,(preciouni*count(descripcion)) as total from producto,pedido where producto.codigopro=pedido.codigop group by descripcion,preciouni order by count(descripcion) asc";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		return resultSet;
	}
	public ResultSet obtenerProdVendCantidadDesc(){
		String tiraSQL = "SELECT descripcion,count(descripcion) as cantidad,(preciouni*count(descripcion)) as total from producto,pedido where producto.codigopro=pedido.codigop group by descripcion,preciouni order by count(descripcion) desc";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		return resultSet;
	}
	public ResultSet obtenerIngredientesMasUsados(){
		String tiraSQL = "SELECT ingrediente.descripcion as descripcioningrediente,count(ingrediente.descripcion) as cantidad FROM ingrediente,receta,producto where ingrediente.codigoin=receta.codigoin and producto.codigopro=receta.codigop group by ingrediente.descripcion order by cantidad desc;";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		return resultSet;
	}
	
}
